widget: Keep a widget reference around _gtk_widget_run_controllers()
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 6 May 2014 13:25:31 +0000 (15:25 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 23 May 2014 17:54:29 +0000 (19:54 +0200)
The widget may be destroyed within the loop, in reaction to the signals
sent by the controllers. Protect against that.

gtk/gtkwidget.c

index 8e8d66325d5d2102239530e7b9812cbdf9c95851..6d9c17f7a57f449fdee321e2ea89c1a968f0a041 100644 (file)
@@ -7210,6 +7210,7 @@ _gtk_widget_get_controllers_evmask (GtkWidget *widget)
   GList *l;
 
   priv = widget->priv;
+  g_object_ref (widget);
 
   for (l = priv->event_controllers; l; l = l->next)
     {
@@ -7240,6 +7241,8 @@ _gtk_widget_run_controllers (GtkWidget           *widget,
         handled |= gtk_event_controller_handle_event (data->controller, event);
     }
 
+  g_object_unref (widget);
+
   return handled;
 }